home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / DTP / DTP_TEX / 3239.ZIP / DVIMTP.ZIP / STRID2.H < prev    next >
Text File  |  1986-12-19  |  1KB  |  38 lines

  1. /* -*-C-*- strid2.h */
  2. /*-->strid2*/
  3. /**********************************************************************/
  4. /******************************* strid2 *******************************/
  5. /**********************************************************************/
  6.  
  7. /* toupper() is supposed to work for all letters, but PCC-20 does it
  8. incorrectly if the argument is not already lowercase; this definition
  9. fixes that. */
  10.  
  11. #define UC(c) (islower(c) ? toupper(c) : c)
  12.  
  13. int
  14. strid2(string,substring)/* Return index (0,1,...) of substring in string */
  15. char string[];        /* or -1 if not found.  Letter case is IGNORED. */
  16. char substring[];
  17. {
  18.     register int k;    /* loop index */
  19.     register int limit;    /* loop limit */
  20.     register char *s;
  21.     register char *sub;
  22.  
  23.     limit = (int)strlen(string) - (int)strlen(substring);
  24.  
  25.     for (k = 0; k <= limit; ++k)/* simple (and slow) linear search */
  26.     {
  27.     s = &string[k];
  28.  
  29.     for (sub = &substring[0]; (UC(*s) == UC(*sub)) && (*sub); (++s, ++sub))
  30.         /* NO-OP */ ;
  31.  
  32.     if (*sub == '\0')    /* then all characters match */
  33.         return(k);        /* success -- match at index k */
  34.     }
  35.  
  36.     return(-1);            /* failure */
  37. }
  38.